package 寒假刷题;

import java.util.PriorityQueue;

public class 最长快乐字符串 {
    public String longestDiverseString(int a, int b, int c) {
        //优先队列，自定义排序规则（第二个数从大到小排序，保证了先使用剩余字符最多的字符
        PriorityQueue<int[]> queue = new PriorityQueue<>((x,y) -> y[1]-x[1]);
        //（字符编号, 字符剩余数量）
        if (a>0) queue.add(new int[]{0,a});
        if (b>0) queue.add(new int[]{1,b});
        if (c>0) queue.add(new int[]{2,c});
        StringBuilder builder = new StringBuilder();
        while (!queue.isEmpty()){
            int[] poll = queue.poll();
            int len = builder.length();
            //有连续两个相同字母
            if (len>=2 && builder.charAt(len-1)-'a'==poll[0] && builder.charAt(len-2)-'a'==poll[0]){
                if (queue.isEmpty())
                    break;
                //添加第二多的字母
                int[] cur = queue.poll();
                builder.append((char)(cur[0]+'a'));
                if (--cur[1]>0)
                    queue.add(cur);
                queue.add(poll);
            }
            else{
                builder.append((char)(poll[0]+'a'));
                if (--poll[1]>0){
                    queue.add(poll);
                }
            }
        }
        return builder.toString();
    }
}
